var express = require('express');
var router = express.Router();
const { connect,mongoose } = require('../../db/mongodb');
const BillModel = require('../../models/BillModel');


// 记账本列表数据
router.get('/account', function (req, res, next) {
  console.log("account");
  BillModel.find().sort({ date: -1 }).then((data) => {
    console.log(data);
    res.json({ "code": "0000", "msg": "success", "data": data });
  }).catch((err) => {
    res.json({ "code": "1001", "msg": "读取失败", "data": null });
  });
});

// 获取单个账单
router.get('/account/:id', function (req, res, next) {
  if (!mongoose.Types.ObjectId.isValid(req.params.id)) {
    res.json({ "code": "2003", "msg": "无效的账单ID", "data": null });
    return;
  };
  BillModel.find({ _id: req.params.id }).then((data) => {
    res.json({ "code": "0000", "msg": "查询成功", "data": data });
  }).catch((err) => {
    res.json({ "code": "1001", "msg": "读取失败", "data": null });
  });
});


// 保存账单
router.post('/account', function (req, res) {
  try {
    const { type, category, amount, payType, date, remark } = req.body;

    // 字段类型转换
    const billData = {
      ...res.body,
      type: Number(type),
      category: category.toString(),
      amount: Number(amount),
      payType: payType,
      date: new Date(date),
      remark: remark || ''
    };
    // 使用连接池执行数据库操作
    BillModel.create(billData)
      .then((data) => {
        res.json({ "code": "0000", "msg": "添加成功", "data": data });
      })
      .catch((err) => {
        res.json({ "code": "1002", "msg": `添加失败: ${err.message}`, "data": null });
      });
  } catch (err) {
    res.json({ "code": "5002", "msg": `添加失败: ${err.message}`, "data": null });
  }
});

// 更新账单
router.patch('/account/:id', function (req, res) {
  if (!mongoose.Types.ObjectId.isValid(req.params.id)) {
    res.json({ "code": "2003", "msg": "无效的账单ID", "data": null });
    return;
  };
  try {
    // 正确获取请求体参数
    const updateData = {
      ...req.body,  // 修正为req.body
      ...(req.body.date && { date: new Date(req.body.date) }), // 条件转换日期
      ...(req.body.amount && { amount: Number(req.body.amount) }),
      ...(req.body.type && { type: Number(req.body.type) })
    };
    BillModel.findByIdAndUpdate(
      req.params.id,
      { $set: updateData },
      { new: true }  // 返回更新后的文档
    ).then((data) => {
      if (!data) {
        return res.json({ "code": "2004", "msg": "账单不存在", "data": null });
      }
      res.json({ "code": "0000", "msg": "更新成功", "data": data });
    }).catch((err) => {
      res.json({ "code": "1005", "msg": `更新失败: ${err.message}`, "data": null });
    });
  } catch (err) {
    res.json({ "code": "5005", "msg": `系统错误: ${err.message}`, "data": null });
  }
});

// 删除账单
router.delete('/account/:id', function (req, res) {
  if (!mongoose.Types.ObjectId.isValid(req.params.id)) {
    res.json({ "code": "2003", "msg": "无效的账单ID", "data": null });
    return;
  };
  // 新增 ObjectId 转换
  BillModel.deleteOne({ _id: req.params.id })
    .then((data) => {
      res.json({ "code": "0000", "msg": "删除成功", "data": data });
    })
    .catch((err) => {
      res.json({ "code": "5002", "msg": "删除失败", "data": null });
    });
});

module.exports = router;
